package com.oig.sys.file.controller;

import com.oig.common.module.SysResponse;
import com.oig.common.validator.GroupAdd;
import com.oig.common.validator.GroupEdit;
import com.oig.sys.file.dto.BusFileConfigDto;
import com.oig.sys.file.service.ITbBusFileConfigService;
import com.oig.sys.file.vo.BusFileConfigVo;
import com.oig.sys.log.annotation.SysLog;
import com.oig.sys.security.util.SecurityUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@Tag(name = "业务文件存储配置")
@RestController
@RequestMapping("/fileConfig")
@Slf4j
public class TbBusFileConfigController {

    private final ITbBusFileConfigService busFileConfigService;

    @Autowired
    public TbBusFileConfigController(ITbBusFileConfigService busFileConfigService){
        this.busFileConfigService = busFileConfigService;
    }

    /**
     * 文件存储配置改为不隔离
     * 配置功能不开放给租户
     * todo 现在界面有选租户 代码后面再改
     */
    @PreAuthorize("@pms.hasPermission('/fileConfig/add')")
    @SysLog(value="业务文件存储配置",apiUrl="/fileConfig/add")
    @Operation(summary="业务文件存储配置")
    @PostMapping(value = "add")
    public BusFileConfigVo addBusFileConfig(@RequestBody @Validated(GroupAdd.class) BusFileConfigDto configDto){
        log.info("add BusFileConfig,{}", configDto);
        configDto.setCreateId(SecurityUtil.getDefineUserMain().getId());
        configDto.setCreateName(SecurityUtil.getDefineUserMain().getRealName());
        configDto.setCreateTime(new Date());
        return this.busFileConfigService.addBusFileConfig(configDto);
    }


    @PreAuthorize("@pms.hasPermission('/fileConfig/update')")
    @SysLog(value="业务文件存储配置修改",apiUrl="/fileConfig/update")
    @Operation(summary="业务文件存储配置修改")
    @PostMapping(value = "update")
    public BusFileConfigVo updateBusFileConfig(@RequestBody @Validated(GroupEdit.class) BusFileConfigDto configDto){
        log.info("update BusFileConfig,{}", configDto);
        configDto.setLastUpdateTime(new Date());
        configDto.setLastUpdateId(SecurityUtil.getDefineUserMain().getId());
        configDto.setLastUpdateName(SecurityUtil.getDefineUserMain().getRealName());
        return this.busFileConfigService.updateBusFileConfig(configDto);
    }

    @PreAuthorize("@pms.hasPermission('/fileConfig/audit')")
    @SysLog(value="业务文件存储配置复核",apiUrl="/fileConfig/audit")
    @Operation(summary = "业务文件存储配置复核")
    @PostMapping(value = "/audit")
    public BusFileConfigVo auditBusFileConfig(@RequestParam("id")Integer id,
                                              @RequestParam("resultType")String resultType,
                              @RequestParam("remark")String remark){
        log.info("audit BusFileConfig:{}-{}-{}", id, resultType, remark);
        BusFileConfigDto configDto = new BusFileConfigDto();
        configDto.setId(id);
        configDto.setReqType(resultType);
        configDto.setCheckRemark(remark);
        configDto.setCheckId(SecurityUtil.getDefineUserMain().getId());
        configDto.setCheckName(SecurityUtil.getDefineUserMain().getRealName());
        configDto.setCheckTime(new Date());
        return busFileConfigService.auditBusFileConfig(configDto);
    }


    @PreAuthorize("@pms.hasPermission('/fileConfig/cancel')")
    @SysLog(value="注销业务文件存储配置",apiUrl="/fileConfig/cancel")
    @Operation(summary = "注销业务文件存储配置")
    @PostMapping(value = "/cancel/{id}")
    public SysResponse<Integer> cancelBusFileConfig(@PathVariable("id") Integer id){
        log.info("注销业务文件存储配置:{}", id);
        busFileConfigService.cancelBusFileConfig(id);
        return SysResponse.ok(id,"注销业务文件存储配置成功");
    }


    @Operation(summary = "查看业务文件存储配置")
    @PostMapping(value = "/info/{id}")
    public BusFileConfigVo info(@PathVariable("id")Integer id){
        log.info("get BusFileConfig info: {}", id);
        return busFileConfigService.getBusFileConfig(id);
    }


}
